#include <vector>
#include "Variable.h"
/*тетрада*/
struct CTetr
{
  /*коды операций в тетрадах*/
  enum OpCode
  {
    VOID, //todo такое бывает?
    SET,
    ADD,
    SUB,
    MUL,
    OR,
    AND,
    NOT
    //todo какие там еще бывают
  };

  /*код операции*/
  OpCode code;
  
  /*адрес результата*/
  CValue res;

  /*указатели на операнды*/
  CValue op1, op2;
  
  CTetr(OpCode c=VOID, CValue r=CValue(), CValue o1=CValue(), CValue o2=CValue())
    : code(c), op1(o1), op2(o2), res(r)
  {}
};

/*здесь лежат все тетрады*/
std::vector<CTetr> m_tetr;

/*запомнить тетраду и вернуть ее номер*/
//todo а нужен мне этот номер?
int pushTetr(CTetr t)
{
  m_tetr.push_back(t);
}

/*получить тетраду с заданным номером*/
CTetr getTetr(int num)
{
  return m_tetr.at(num);
}

CTetr tetr_floatConst(int attr)
{
  return CTetr(CTetr::SET, CValue(CValue::FLOAT, attr));
}

CTetr tetr_intConst(int attr)
{
  return CTetr(CTetr::SET, CValue(CValue::INT, attr));
}


